# -*- coding: utf-8 -*-
from Tkinter import *
import xmlrpclib
import tkFileDialog
import tkMessageBox as MsgBox
from xTkinter import xCombobox

class Login(Frame):
    def __init__(self, master,parent,**cnf):
        KeysList=cnf.keys()
        self.parent = parent
        self.master=master
        self.width=400
        self.height=200
        if ('width' in KeysList):
            self.width=cnf['width']
        if ('width' in KeysList):
            self.height=cnf['height']
        Frame.__init__(self,master,cnf)        
        self.config(bg='#6B979C',relief='raised',bd=3)
        # CREATION DU CADRE
        self.master.update()
        self.x=self.master.winfo_width()/2-(self.width/2)
        self.y=self.master.winfo_height()/2-(self.height/2)       
        self.place(x=self.x,y=self.y)
        self.nomServeurERP=xCombobox(self,width=20,x=195,y=45)
        self.nomServeurERP.setLocation(195,45)
        self.nomServeurERP.addItems(['localhost:8000','localhost:11501','10.57.70.69:8000','10.57.70.69:11501'])
        self.nomServeurERP.setListWidth(20)
        self.nomServeurERP.setListHeight(3)
        self.nomServeurERP.setText('localhost:8000')
        self.nomServeurOracle="titan"
        # CHAMP POUR SAISIR LE NOM DU SERVEUR ERP
        text1=Label(self ,text="Connexion au Serveur PERP",bg='#6B979C').place(x=50,y=45 )
        # CHAMP POUR SAISIR L'USERNAME DE L'UTILISATEUR
        text2=Label(self ,text="Nom de l'Utilisateur",bg='#6B979C').place(x=50,y=90 )
        self.variableNomUtilisateur=StringVar()
        self.NomUser = Entry(self , textvariable=self.variableNomUtilisateur,width=30,bg='#F7F2B2')
        self.NomUser.place(x=170,y=90)
        # CHAMP POUR SAISIR LE MOT DE PASSE
        text3=Label(self ,text="Mot de passe",bg='#6B979C').place(x=50,y=120 )
        self.variableMotPasse=StringVar()
        self.MotPasse = Entry(self , textvariable=self.variableMotPasse,show="*",width=30,bg='#F7F2B2')
        self.MotPasse.place(x=170,y=120)
        self.NomUser.bind("<Key-Return>", self.callback)
        self.MotPasse.bind("<Key-Return>", self.callback)  
        # BOUTONS POUR CONFIRMER OU POUR ABANDONNER
        self.BoutonOK=Button(self ,text="OK",width=12,bg='#046380',fg="white", command=lambda evt=None:self.callback(evt))
        self.BoutonOK.place(x=195,y=160)
        self.BoutonAnnuler=Button(self ,text="Annuler",width=12,bg='#046380',fg="white",command=self.QuitterERP)
        self.BoutonAnnuler.place(x=285,y=160)
        self.pack(anchor=CENTER)
        self.NomUser.focus()
        self.master.bind('<Configure>',self.repaintLogin,add='+')
        pass

    def repaintLogin(self,evt):
        self.master.update()
        self.x=self.master.winfo_width()/2-(self.width/2)
        self.y=self.master.winfo_height()/2-(self.height/2)       
        self.place(x=self.x,y=self.y)
        pass
    
    def callback(self,e):
        if(self.NomUser.get()==''):
            MsgBox.showerror('PERP | Login', 'Vous devez entrer un nom d\'utilisateur')
        elif (self.MotPasse.get()==''):
            MsgBox.showerror('PERP | Login', 'Vous devez entrer un mot de passe')
        else:
            self.OKConnexionERP()

        
    def OKConnexionERP(self):          
        self.parent.initServeur(self.nomServeurERP.getText())
        reponse=self.parent.serveur.Authentification(self.variableNomUtilisateur.get(),\
                                                self.variableMotPasse.get())
        if (reponse[0]==1):
            self.destroy()
            self.parent.vue.barreMenu[0].entryconfigure ( 0, state='disabled')
            self.parent.vue.barreMenu[0].entryconfigure ( 1, state='normal')
            self.parent.vue.menuBD.entryconfigure ( 0, state='normal')
            self.parent.vue.menuBD.entryconfigure ( 1, state='normal')
            self.parent.vue.menuBD.entryconfigure ( 2, state='normal')
            self.parent.vue.menuBD.entryconfigure ( 3, state='normal')
            self.parent.vue.menuBD.entryconfigure ( 4, state='normal')
            self.parent.vue.menuBD.entryconfigure ( 5, state='normal')
            self.parent.vue.menuBD.entryconfigure ( 6, state='normal')
            self.master.unbind('<Configure>')   
        else:
            MsgBox.showerror('PERP | Login','ATTENTION!... Nom de l\'utilisateur ou mot de passe non valide' )               
            self.variableMotPasse.set('')
            self.variableNomUtilisateur.set('')
            self.NomUser.focus()
            
    def QuitterERP(self):
        if MsgBox.askokcancel("Attention", "Vous annulez l'ouverture de session."):
            self.destroy()
